package com.fzg.service.impl;

import com.fzg.entity.CountryName;
import com.fzg.mapper.CountryNameMapper;
import com.fzg.service.CountryNameService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * <p>
 * 存储世界上全部国家的英文名，中文名 服务实现类
 * </p>
 *
 * @author fzg
 * @since 2022-11-17
 */
@Service
@Slf4j
public class CountryNameServiceImpl extends ServiceImpl<CountryNameMapper, CountryName> implements CountryNameService {

    @Autowired
    private CountryNameMapper countryNameMapper;

    /**
     * 获取世界上所有国家名字
     * 并且存储到MySQL表中
     */
    @Override
    public String getWorldCountry() {
        log.info(getWorldAllCountrys().toString());
        ArrayList<HashMap<String, Object>> list = getWorldAllCountrys();
        int count = 0;
        for (HashMap<String, Object> map : list) {
            int insert = countryNameMapper.insert(new CountryName() {{
                setChineseName(map.get("chineseName").toString());
                setEnglishName(map.get("englishName").toString());
            }});
            count += insert;
        }
        log.info("插入了" + count + "行数据");
        return "插入了 " + count + "行数据。";
    }

    @Override
    public String test() {
        return "范占国";
    }

    /**
     * 获取世界上所有国家中文名字和英文名
     * @return ArrayList<HashMap<String,Object>>
     */
    public ArrayList<HashMap<String,Object>> getWorldAllCountrys(){
        // String countryUrl = "src\\main\\java\\com\\fzg\\common\\demo\\country\\country.txt";
        String countryUrl = "E:\\学习\\项目\\vue-vant-app\\myBlog\\myCaveolae_server\\src\\main\\java\\com\\fzg\\common\\demo\\country\\country.txt";
        File file = new File(countryUrl);
        BufferedReader bf;
        String data = "";
        try {
            bf = new BufferedReader(new FileReader(file));
            data = bf.readLine();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            log.info("文件未找到");
        } catch (IOException e) {
            e.printStackTrace();
            log.info("文件读取失败");
        }
        if (data.equals("")){
            log.info("文件内容为空");
        }else {
            log.info("文件读取成功");
            log.info(data);
            // 去掉大括号以及前面的字符，以及最后面的大括号以及分号
            String rData = data.substring(data.indexOf("{") + 1 , data.lastIndexOf("}"));
            log.info(rData);
            log.info(rData.indexOf("[") + "");
            log.info(rData.indexOf("]") + "");
            return convertStr(rData);
        }
        return null;
    }

    public  ArrayList<HashMap<String,Object>> convertStr(String str){
        ArrayList<HashMap<String, Object>> list = new ArrayList<>();
        // 第一个冒号之前的字符串去掉
        String str1 = str.substring(str.indexOf(":") + 1);
        log.info(str1);

        // 最后一个冒号后面的国家单独提出来
        String lastCountryStr = str1.substring(str1.lastIndexOf(":") + 1);
        log.info(lastCountryStr);

        // 最后一个国家字符串去掉两边的中括号
        String lastCountryStr1 = lastCountryStr.substring(lastCountryStr.indexOf("[") + 1, lastCountryStr.lastIndexOf("]"));
        log.info(lastCountryStr1);

        // 最后一个国家字符串根据逗号分割
        String[] lastCountryStr2 = lastCountryStr1.split(",");
        // 最后一个国家的中文名
        String lastCountryChineseName = removeQuotesBothSide(lastCountryStr2[0]);
        log.info(lastCountryChineseName);
        // 最后一个国家的英文名
        String lastCountryEnglishName = removeQuotesBothSide(lastCountryStr2[2]);
        log.info(lastCountryEnglishName);

        // 接下来就是剩余部分
        String str2 = str1.substring(0, str1.lastIndexOf(":"));
        log.info(str2);

        // str2是一个有规律的string，以冒号分割
        String[] str3 = str2.split(":");
        for (String s : str3) {
            HashMap<String, Object> map = new HashMap<>();
            log.info(s);
            // 去掉中括号两边的字符串
            String itemStr = removeStrBracketsBothSide(s);
            log.info(itemStr);
            // 第二个逗号之后的字符串就是国家英文名
            String englishName = removeQuotesBothSide(itemStr.substring(itemStr.indexOf(",", itemStr.indexOf(",") + 1)));
            log.info(englishName);
            map.put("englishName", englishName);
            // 第一个逗号之前的就是国家中文名
            String chineseName = removeQuotesBothSide(itemStr.substring(0, itemStr.indexOf(",")));
            log.info(chineseName);
            map.put("chineseName", chineseName);
            list.add(map);
        }
        // 最后put最后一个国家
        HashMap<String, Object> map = new HashMap<>();
        map.put("englishName",lastCountryChineseName);
        map.put("chineseName",lastCountryEnglishName);
        list.add(map);
        return list;
    }

    /**
     * 去掉引号
     * @param s 参数
     * @return String
     */
    public  String removeQuotesBothSide(String s){
        return s.substring(s.indexOf("'") + 1, s.lastIndexOf("'"));
    }

    public  String removeStrBracketsBothSide(String s){
        return s.substring(s.indexOf("[") + 1,s.lastIndexOf("]"));
    }


}
